// 验证工具函数

/**
 * 验证手机号格式
 * @param {string} phone 手机号
 * @returns {boolean} 是否有效
 */
export const validatePhone = (phone) => {
  if (!phone) return false;
  
  // 中国大陆手机号正则表达式
  const phoneRegex = /^1[3-9]\d{9}$/;
  return phoneRegex.test(phone);
};

/**
 * 验证验证码格式
 * @param {string} code 验证码
 * @returns {boolean} 是否有效
 */
export const validateCode = (code) => {
  if (!code) return false;
  
  // 4-6位数字验证码
  const codeRegex = /^\d{4,6}$/;
  return codeRegex.test(code);
};

/**
 * 验证邮箱格式
 * @param {string} email 邮箱
 * @returns {boolean} 是否有效
 */
export const validateEmail = (email) => {
  if (!email) return false;
  
  const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
  return emailRegex.test(email);
};

/**
 * 验证密码强度
 * @param {string} password 密码
 * @returns {object} 验证结果
 */
export const validatePassword = (password) => {
  if (!password) {
    return { valid: false, message: '密码不能为空' };
  }
  
  if (password.length < 6) {
    return { valid: false, message: '密码长度不能少于6位' };
  }
  
  if (password.length > 20) {
    return { valid: false, message: '密码长度不能超过20位' };
  }
  
  // 检查是否包含字母和数字
  const hasLetter = /[a-zA-Z]/.test(password);
  const hasNumber = /\d/.test(password);
  
  if (!hasLetter || !hasNumber) {
    return { valid: false, message: '密码必须包含字母和数字' };
  }
  
  return { valid: true, message: '密码格式正确' };
};

/**
 * 验证身份证号格式
 * @param {string} idCard 身份证号
 * @returns {boolean} 是否有效
 */
export const validateIdCard = (idCard) => {
  if (!idCard) return false;
  
  // 18位身份证号正则表达式
  const idCardRegex = /^[1-9]\d{5}(18|19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/;
  return idCardRegex.test(idCard);
};

/**
 * 验证银行卡号格式
 * @param {string} bankCard 银行卡号
 * @returns {boolean} 是否有效
 */
export const validateBankCard = (bankCard) => {
  if (!bankCard) return false;
  
  // 银行卡号一般为16-19位数字
  const bankCardRegex = /^\d{16,19}$/;
  return bankCardRegex.test(bankCard);
};

/**
 * 格式化手机号显示
 * @param {string} phone 手机号
 * @returns {string} 格式化后的手机号
 */
export const formatPhone = (phone) => {
  if (!phone) return '';
  
  // 去除所有非数字字符
  const cleanPhone = phone.replace(/\D/g, '');
  
  // 格式化为 xxx xxxx xxxx
  if (cleanPhone.length === 11) {
    return cleanPhone.replace(/(\d{3})(\d{4})(\d{4})/, '$1 $2 $3');
  }
  
  return cleanPhone;
};

/**
 * 隐藏手机号中间4位
 * @param {string} phone 手机号
 * @returns {string} 隐藏后的手机号
 */
export const hidePhone = (phone) => {
  if (!phone || phone.length !== 11) return phone;
  
  return phone.replace(/(\d{3})\d{4}(\d{4})/, '$1****$2');
};

export default {
  validatePhone,
  validateCode,
  validateEmail,
  validatePassword,
  validateIdCard,
  validateBankCard,
  formatPhone,
  hidePhone
};